const express = require('express');
const jwt = require('jsonwebtoken');

const app = express();
const PORT = 3000;

// 模拟的秘钥，实际应用中应保密
const SECRET_KEY = 'your_secret_key';

// 模拟的刷新令牌黑名单，实际应用中应存储在数据库中
const refreshTokenBlacklist = [];

// 登录接口，生成访问Token和刷新Token
app.post('/login', (req, res) => {
    // 假设用户输入正确，生成Token
    const accessToken = jwt.sign({ userId: 1 }, SECRET_KEY, { expiresIn: '10s' }); // 访问Token有效期10秒
    const refreshToken = jwt.sign({ userId: 1 }, SECRET_KEY, { expiresIn: '10m' }); // 刷新Token有效期10分钟

    res.json({
        accessToken,
        refreshToken,
    });
});

// 刷新Token接口
app.post('/refresh', (req, res) => {
    const { refreshToken } = req.body;

    // 检查刷新令牌是否在黑名单中或者是否过期
    if (refreshTokenBlacklist.includes(refreshToken) || !jwt.verify(refreshToken, SECRET_KEY)) {
        return res.status(401).send('Invalid or expired refresh token');
    }

    // 如果有效，生成新的访问Token
    const accessToken = jwt.sign({ userId: 1 }, SECRET_KEY, { expiresIn: '10s' });

    res.json({
        accessToken,
    });

    // 将旧的刷新Token加入黑名单，防止重复使用
    refreshTokenBlacklist.push(refreshToken);
});

app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}`);
});
